/**
 * @description axios请求的封装
 */
const BASE_URL = "http://172.168.100.254:3701";
// const BASE_URL = "http://172.168.100.122:3701";
// const BASE_URL = "http://fitness.h5.itsource.cn:3701"; // 接口请求的 URL

// const BASE_URL = "http://fitness.h5.itsource.cn:3701"; // 接口请求的 URL
// const BASE_URL = "http://172.168.100.254:3701";

const axios = require("axios");
const local = require("./local");
/**
 * 请求拦截器
 *
 * 作用: 在每一次发送讲求的时候进行统一操作  如让后期每一个请求都带上token 令牌
 *
 *
 */
//验证Authorization 访问所有api接口 必须有token值 有token值表示通过验证 才可以继续访问接口
//请求拦截器---发请求时,先带一点东西(token),再发送请求
//语法: axios.interceptors.request.use(成功的回调, 失败的回调)
axios.interceptors.request.use(
  (config) => {
    //获取token
    let token = local.get("t_k");
    //判定
    if (token) {
      config.headers.Authorization = "Bearer " + token;
    } else {
      console.log("你没有token");
    }

    return config;
  },
  (err) => {
    return Promise.reject(err);
  }
);
/* post请求 */
function post(url, data, callback) {
  axios
    .post(BASE_URL + url, data)
    .then((res) => {
      callback(res.data);
    })
    .catch((err) => {
      callback(err);
    });
}

/*get请求*/
function get(url, callback) {
  axios
    .get(BASE_URL + url)
    .then((res) => {
      callback(res.data);
    })
    .catch((err) => {
      callback(err);
    });
}

/** 
     * @method ajax请求
     * @param {*} option
     * @description 调用后端接口
     * @example  {
        search: {
          name: "张三",
        },
        // 成功回调
        success: function (resp) {
          console.log(resp);
        },
        // 失败回调
        error: function (str) {
          console.log(str);
        }
         method: "get/post请求",
        ipIocation: "接口地址",
        search:  "这是传入的字符串对象",
        success方法  对应响应成功后的返回值
        error方法 响应失败的返回值
    }
 */
function postTransform(opthins) {
  let {
    method = "GET",
    ipIocation = "",
    search = {},
    success,
    error,
  } = opthins;
  // 创建对象
  let xhl = new XMLHttpRequest();
  let upper = method.toUpperCase();
  let arr = [];
  for (const key in search) {
    arr.push(`${key}=${search[key]}`);
  }
  if (upper === "GET") {
    // 进行判断 如果是get方法则进行参数拼接
    ipIocation += "?" + arr.join("&");
  }
  // console.log(ipIocation);
  xhl.open(method, ipIocation);
  xhl.onreadystatechange = function () {
    if (xhl.readyState === 4) {
      if (xhl.status === 200) {
        success(JSON.parse(xhl.responseText));
      } else {
        error("请求、响应错误");
      }
    }
  };
  //    设置请求头 如果是post 则会传入响应头的格式
  upper === "POST" &&
    xhl.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  // 进行判断 如果是get方法则不对send方法放入参数
  upper == "GET" ? xhl.send() : xhl.send(arr.join("&"));
}
//  封装更换头像
function upLoadFile(url, key, value, callback) {
  let fd = new FormData();
  fd.append(key, value);
  post(url, fd, function (res) {
    callback(res);
  });
}
/* 导出 */
module.exports = {
  get,
  post,
  postTransform,
  BASE_URL,
  upLoadFile,
};
